変数を使用してタッチへの入力としてパス名を作成する

変数を使用してタッチへの入力としてパス名を作成する

よく使うパスを環境変数として保存し、この変数を呼び出してパス名を設定したいと思います。

$ mypath="~/local/bin/"
$ newFile="${mypath}newFile.sh"
$ echo $newFile
~/local/bin/newFile.sh

これはうまくいくようです。

ただし、タッチへの入力として$ newFileを呼び出すと失敗します。

$ touch $newFile
touch: ~/local/bin/newFile.sh: No such file or directory

$ touch "${mypath}newFile.sh"
touch: ~/local/bin/newFile.sh: No such file or directory

どちらも機能しません。私は何を見逃していますか?

PS 私はこれが議論されたと確信していますが、私は初めてbashに触れたので、用語が何を検索するべきかはまだわかりません。助けてくれてありがとう。

答え1

拡張順序のため、期待どおりに機能しません。

Bashのマニュアルから:

拡張順序は、中かっこ拡張、パラメータと変数拡張、算術拡張、コマンドの置換(左から右へ)です。

最初の行で~引用符なしで使用すると拡張されます。実際、~チルダ拡張は変数拡張の前に実行されるため、引用符は内部的に拡張されず、後で拡張されません。

私は動作しているようだと書いていますが、実際にecho出力結果は~/local/bin/newFile.sh機能しないことがわかりました。

値にスペースが含まれているため、引用が必要な場合は後半を引用できます~/

mypath=~/"local/bin with spaces/"
newFile="${mypath}newFile.sh"
echo "$newFile"

答え2

もちろん私はすぐに答えを見つけました。

$ newFile="${mypath}newFile.sh"
touch newFile

動作しません

$ newFile=${mypath}newFile.sh
touch newFile

実際に働く

関連情報