[英]Expand environmental variable from grep output in bash script
我是bash腳本的新手,我只是想讓它工作。 我想要的是一個cd到默認下載目錄的腳本,例如/ home / davide / Downloads,並從Ubuntu下載文件。 我正在獲取默認下載目錄,如:
OUTPUT=$(grep DOWNLOAD $HOME/.config/user-dirs.dirs)
DIR=$(echo $OUTPUT | cut -f 2 -d "=" | tr "\"" "\n")
這工作正常。 DIR是一個字符串,如:
$HOME/Downloads
當我嘗試cd到它時出現問題。 它做的事情如下:
cd $HOME/Downloads
拋出錯誤,而它應該:
cd /home/davide/Downloads
我搜索了很多,在我看來應該完成擴展。 我已經通過使用eval命令擴展了它,但看起來它應該是最后的手段。
謝謝您的幫助!
使用gnu
提供的envsubst
用shell格式字符串替換環境變量:
dir=$(awk -F '["=]+' '/DOWNLOAD/{print $2}' file | envsubst)
echo "$dir"
# will output /home/user/Downloads
cd "$dir"
從評論中的討論中有兩個問題:
$DIR
有換行符。 我相信這是你原來錯誤的原因。 我建議使用不同的方法來確定$DIR
:
DIR=$(echo $OUTPUT | sed -r 's/.*="(.*)"/\\1/g')
變量$DIR
的文字$HOME
可以用envsubst
代替
DIR=$(echo $DIR | envsubst )
試試這個:
cd "$(grep DOWNLOAD $HOME/.config/user-dirs.dirs | cut -f 2 -d "=" | tr "\"" "\n")"
或者,如果這不起作用:
cd "$(grep DOWNLOAD $HOME/.config/user-dirs.dirs | cut -f 2 -d "=" | tr "\"" "\n" | tr -d "\n")"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.