Bashスクリプトが機能しない

Bashスクリプトが機能しない

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

おすすめ記事