如何传递包含引号/空格的脚本参数?
|
我正在尝试编写脚本
notify-finish
,可以在任何命令之前添加该脚本。完成后,它将运行以下参数指定的命令,然后在命令完成后向用户发送电子邮件。这是我所拥有的:
PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e \"Subject: `hostname`: $PROG finished\\r\\nTo: <$USER>\\r\\n\\r\\nExited with $ECODE\\r\\n\" | sendmail $USER
这在大多数情况下都有效,但是当参数包含空格时,引号会被删除。
工作示例:
notify-finished rsync -avz source/ user@remote:dest/
失败的例子:
notify-finished rsync -avz -e \'ssh -c blowfish\' source/ user@remote:dest/
在第二种情况下,“ 4”扩展为“ 5”,缺少单引号。它不能与双引号一起使用,也不能与$*
一起使用。
阅读其他文章后,我尝试将命令放入数组中,但出现了完全相同的问题:
CMD=(notify-finished rsync -avz -e \'ssh -c blowfish\' source/ user@remote:dest/)
${CMD[@]}
我该如何处理所有论点?
没有找到相关结果
已邀请:
2 个回复
车料
引号:
这将完全按照接收的参数传递每个参数。如果您不包括引号,则会根据will10ѭ拆分每个元素:
就像
,将每个元素作为单独的参数传递。
就像
,将所有串联的元素作为单个参数传递
和
类似于
,将空白处的每个元素分解,扩展所有glob,并将每个结果单词作为单独的元素传递(
)。 数组也是如此,例如
和
款去芳尾脊
,
和
)。另外:分配变量时,不要在变量名前加上$;用
发表评论;并且在最后一行,单引号将完全防止变量被替换。