【发布时间】:2013-02-08 00:00:16
【问题描述】:
这是我要执行的 bash 脚本的代码:打开一个新控制台并在其中执行带有文件列表的 clamscan
gnome-terminal -x sh -c "clamscan $@"
在这里展开后,如果给脚本的 2 个参数是file1.txt file2.txt
gnome-terminal -x sh -c 'clamscan file1.txt' file2.txt
如您所见,只有clamscan file1.txt 被执行。
如果我尝试另一种方式来编写代码
gnome-terminal -x sh -c "clamscan \"$@\""
这是展开结果
gnome-terminal -x sh -c 'clamscan "file1.txt' 'file2.txt"'
效果不好。
有谁知道如何正确地将"$@" 整合到其他引号中?
编辑 我的目标是在扩展后拥有类似
gnome-terminal -x sh -c 'clamscan "file1.txt" "file2.txt"'
【问题讨论】:
-
单引号不展开变量,所以展开结果为
gnome-terminal -x sh -c 'echo $@',$@不展开,什么都不显示。 -
是的,但是当
sh启动命令时,它会扩展给定的字符串。你试过了吗? -
是的,我刚刚尝试过,但没有显示任何内容。带简单引号的
$@第一次不展开,第二次用sh展开,但被视为未知变量。 -
不管有没有都不能。你试过了吗:gnome-terminal -x sh -c "echo \$@"
-
为什么不使用
$*而不是$@。$@等效于"$1" "$2"和$*is"$1 $2"
标签: bash command-line-arguments quotes