在我的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」)'我得到你提到這些是因爲有善良,但我不明白。這麼多的時間來學習,這麼短的時間:) –