Bash 脚本不工作

Bash 脚本不工作

我想创建一个ls使用提供的参数执行命令的脚本。为什么它不起作用?我尝试使用 example 运行它-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[@]}"orls "$@"代替。

比较两个调用:

set -x
ls -l
ls "-l"
set +x

答案2

这不是 bash 中引用的工作方式。输入时

ls "-R"

引号删除发生在命令上,因此命令变为

ls -R

另一方面,如果您设置

text='ls "-R"'

并运行$text,引号删除不会发生。请参阅man bash扩展部分:

在前面的扩展之后,所有不是由上述扩展之一产生的未加引号的字符 \、' 和 " 出现的位置都将被删除。

"这里是参数扩展的结果,所以没有被删除。

相关内容