echo "$@"
命令回显时,参数列表看起来像这样:
在这种情况下是三个文件和一个文件夹的路径。/Volumes/G-Raid/Online/WAV_TEST/Testbok 50/01/01000 43-001.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/02/02000 43-002.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/03/03000 43-003.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50
在 shell 脚本中,我使用从 automator 传递的参数(列表中除了最后一个文件夹)来启动名为 ripcheckc* 的应用程序。
我使用以下命令删除最后一个参数:
_args=( "$@" )
unset _args[${#_args[@]}-1]
这是echo $_args
的内容:
/Volumes/G-Raid/Online/WAV_TEST/Testbok 50/01/01000 43-001.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/02/02000 43-002.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50/03/03000 43-003.wav
与之前相同,但不包含文件夹。
现在,如果我使用"$@"
作为参数运行ripcheckc,它可以正常工作(但由于参数列表中的最后一个路径而在后面失败)。如果我使用${_args[@]}
,应用程序将悄无声息地中止。当我回显$@
和_args
时,输出看起来相同,除了最后一个参数。
我的问题是 - $@和$_args之间有什么区别,使得第一个是有效输入,而第二个则无效?
*此应用程序是ripcheckc
希望我的问题有意义。
编辑:已解决。