我想编写一个stdout
与其$@
逐字对应的脚本,包括任何潜在的双引号,没有换行符。
我试过的:
> cat ./script1
#! /usr/bin/bash
printf "%s %s" $0 $@
echo -n $0 $@
echo -n "$0 $@"
>
> ./script1 a "bc d"
./script1 abc d./script1 a bc d./script1 a bc d>
我希望我的脚本按如下方式运行:
> ./script1 a "bc d"
./script1 a "bc d">
有没有办法做到这一点?
您的位置参数在您的示例中不包含任何双引号:
那里的双引号只是告诉 shell 不应该对 和 之间的空格进行分
bc
词d
。如果您希望您的第二个参数包含文字引号,您需要将它们转义以告诉外壳它们是文字:
或者
您可以使用
printf
以可重复用作 shell 输入(转义)的格式打印它们:正如你所看到的,这只是逃离了空间。
正如其他地方所解释的那样,您键入的双引号指示外壳将封闭的文本视为单个单词。如果你想打印出被引号包围的单词,那是相当简单的;您只需要将它们包含在您输出的文本中:
请注意,这将为每个参数添加双引号,而不仅仅是那些在您运行命令时可能已经包含它们的参数。