2015-03-30 19 views
-1

我有4个参数加入excetute文件:

./project01.sh /* */ /^ ^/ 

,我想使每个参数变量 但在这之前我想修改它,因为它会unconvenient获得进一步的操作。所以我想使它像“/ *”,所以把它放在“”,并在每个字符给\之前,因为其中一些是特殊字符。 我想这样使用:

beg1=echo $1 | sed(some change with $1) 

但它立即改变$ 1这是/ *到方向/斌/启动ITD。在这种情况下我能做些什么?

回答

1

首先,在调用您的脚本时,您不能做任何事情来避免引用。您必须称其为:

./project01.sh '/*' '*/' '/^' '^/' 

...如果你想防止壳操纵任何潜在的。 (^是安全的一些贝壳,但不是全部)。

这是因为在./project01.sh /*(不含引号)的情况下,扩展发生在脚本启动前,因此一旦脚本运行,修改已为时已晚。


二,使用脚本中更多的报价:

echo "$1" | sed ... 

...或者,更好的(修复情况$1包含-E-n,或类似的值):

printf '%s\n' "$1" | sed ... 

...或者,更好的是,如果您的外壳是bash而不是/bin/sh ...

sed ... <<<"$1" 

但是,如果使用sed你的目标是增加语法引用到你的论点,这不会有任何效果:该参数已经扩大了脚本甚至可以运行之前,所以$1已经/bin

相关问题