ls
提供された引数を使用してコマンドを実行するスクリプトを作成したいと思います。なぜ動作しないのですか?例を使って実行してみた-R
ところ、エコーが発生しました(比較のために同じ内容をエコーしました)。
ls "-R"
しかし、 '-R'にアクセスできないと言います。そのファイルやディレクトリはありません。しかし、ls "-R"
端末で実行すると動作します。
スクリプト自体:
text='ls'
while [[ $# -gt 0 ]]
do
text+=' "'
text+=$1
text+='"'
shift
done
echo 'ls "-R"'
echo $text
$text
ベストアンサー1
誤った引用が問題です。"
変数に含まれている場合は引用しません(ここで問題は削除されません!)。例外:eval $text
パラメータを配列に割り当て、代わりにls "${vars[@]}"
orを使用する必要がありますls "$@"
。
2 つの呼び出しを比較します。
set -x
ls -l
ls "-l"
set +x