【发布时间】:2013-12-22 07:19:13
【问题描述】:
这个问题涉及在 automator osx 中运行的 bash 脚本。我正在使用自动操作从查找器中获取和过滤一堆文件引用。然后,我也通过自动操作将父文件夹的名称附加到该列表中。 Automator 然后将这些参数提供给一个名为“运行 shell 脚本”的操作。我不确定 automator 究竟是如何调用脚本的,但参数列表在与以下内容相呼应时看起来像这样: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/在线/WAV_TEST/Testbok 50/03/03000 43-003.wav /Volumes/G-Raid/Online/WAV_TEST/Testbok 50
在这种情况下是 3 个文件和一个文件夹的路径。
在 shell 脚本中,我启动了一个名为 ripcheckc* 的应用程序,它使用从 automator 传递的参数减去列表中的最后一个参数(文件夹)。
我用它来删除最后一个参数:
_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/在线/WAV_TEST/Testbok 50/03/03000 43-003.wav
和以前一样,但没有文件夹。
现在,如果我使用 "$@" 作为参数运行 ripcheckc,它可以工作(但由于参数列表中的最后一个路径而稍后失败)如果我使用 ${_args[@]},应用程序将静默中止。当我回显$@ 和_args 时,除了最后一个参数外,输出看起来相同。
我的问题是 - 使第一个有效输入和第二个无效输入的 $@ 和 $_args 之间有什么区别?
*申请是ripcheckc
我希望我的问题有意义。
编辑:已解决。
【问题讨论】:
-
我用双引号解决了这个问题。像这样:ripcheckc "${_args[@]}".
标签: bash shell argument-passing automator