在我的bash脚本中,我包含了该程序所需的其他文件的数组。然后我在帮助说明中打印这些内容。当我使用printf输出时,我得到了我没有想到的结果。我已经读过,$ {array [@]}形式通常是首选的扩展名默认,所以我从这开始。
我的数组声明:
scriptDependencies=("script1.sh" "script2.sh")
而且(初始)printf命令:
printf "Dependencies: %s\n" "${scriptDependencies[@]}"
我有什么作为输出:
Dependencies: script1.sh
Dependencies: script2.sh
虽然我相信我明白一个基本下标'@'和'*'之间的区别是所有单个元素与所有元素组合在一起,我不是期待打印两条单独的线。
当我切换printf命令使用$ {scriptDependencies [*]}形式,单个线(接近我需要的话)被印:
Dependencies: script1.sh script2.sh
是printf的这一预期的行为,并的下标?还是它指向printf的问题?
我正在使用GNU bash,版本3.2.57(1)-release(x86_64-apple-darwin15)。
如果您想以明确的形式打印数组的内容,请考虑:'printf'Dependencies:'; printf'%q'“$ {scriptDependencies [@]}”; printf'\ n'' - 写的更多,但它意味着'array =(“foo bar”)'和'array =(foo bar)'每个都有不同的输出 - 并且'array =($' foo \ nbar')'同样会得到理智的处理。 –
如果你不关心格式化控制,你也可以使用'declare -p scriptDependencies' –
也许我应该把这个聊天?我不是(迄今)能够围绕你的任何评论包裹我的小脑袋,但我已经测试了两者。对于%q格式,我在依赖项数组中包含的一个字符串包含“(v2)”。当我使用%q时,空格和对角线都添加了escape seq。我不明白是什么使得这些毫不含糊? declare -p scriptDependencies的输出结果如下:declare -a scriptDependencies ='([0] =“script1.sh”[1] =“script2.sh”)'我得到你提到这些是因为有善良,但我不明白。这么多的时间来学习,这么短的时间:) –