2015-03-30 45 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