Bashは、パス名(ワイルドカード)を拡張する前に変数を拡張します。逆方向に進むと仮定すると(つまり、変数を拡張する前にパス名を拡張した場合)、拡張順序に関係なく結果が同じになるように、変数拡張とパス拡張の両方を使用するbashスクリプトを作成できますか?
私は次の簡単なbashスクリプトを思いついた。
#!/bin/bash
# Create a variable called myvar1
myvar1=~
echo $myvar1
# Use both path expansion and variable expansion with the ls command
# Assuming the variable was expanded first, the out should be the same as if the path was expanded first. Is my assumption correct?
ls $myvar1/*.txt
私のスクリプトが質問に満足して答えていることを確認できますか?
答え1
ls $myvar1/*.txt
*.txt
$myvar1
パス名が変数の前に展開されると、一致するファイル名がない可能性があるディレクトリから検索されます。その後、最初にパスを展開してから、ホームディレクトリで終わるファイル名を見つけるのとは異なり、ホームディレクトリパスに$myvar1
展開します。/home/username/*.txt
.txt
通常、ファイル名に$
記号を含めることができるので、拡張順序は常に重要であると思います。 .*
$PATH
一方、グローバル文字を含む変数は変数の値を制御できるため、簡単に解決できます。