我有4个参数添加到excetute文件:
./project01.sh /* */ /^ ^/
我希望将每个参数作为变量 但在此之前我想修改它,因为它将不方便进一步操作。所以我想把它变成" / *"所以把它放进""并且在每个角色给出\之前,因为其中一些是特殊字符。 我试过这样用:
beg1=echo $1 | sed(some change with $1)
但它立即改变$ 1,这是/ *到direction / bin / boot itd。在那种情况下我该怎么办?
答案 0 :(得分:1)
首先,在调用脚本时,您无法做任何事情来避免引用。您必须将其称为:
./project01.sh '/*' '*/' '/^' '^/'
...如果你想防止任何shell操作的可能性。 (^
对一些炮弹是安全的,但不是全部。)
这是因为在./project01.sh /*
(没有引号)的情况下,扩展在脚本启动之前发生 ,因此一旦您的脚本运行,进行更改就太晚了。
其次,在脚本中使用更多引号:
echo "$1" | sed ...
...或更好(修复$1
包含-E
,-n
或类似值的情况):
printf '%s\n' "$1" | sed ...
......或者,更好的是,如果你的shell是bash而不是/bin/sh
...
sed ... <<<"$1"
但是,如果您使用sed
的目的是为您的参数添加语法引用,那么这将永远不会起作用:在脚本运行之前,参数已经展开,因此$1
是已经 /bin
。