关键的问题是,我想调用一个参数包含特殊字符(esp:&;
)的脚本,但在传递之前不让bash处理参数。在我的用例中,用引号或反斜杠修改参数是不方便的。
自从发帖以来,我自己找到了答案,那就是使用阅读
,如下所示:
~$ read -p "enter a string:" str
enter a string: x&x&x&x&
~$ echo "the string: " "$str"
the string: x&x&x&x&
在我看来,这是一个有用的问题,有着有用的解决办法。
原来的问题如下:
我编辑了这个以关注真正的问题。。。
鉴于
~$ function x () { echo ! ;}
~$ x
!
~$ echo x
x
…以下命令创建后台进程:
~$ echo x&x&x&x&
[2] 27320
[3] 27321
[4] 27322
x
[5] 27323
[2] Done echo x
!
!
sean@lyra:~$ !
[3] Done x
[4] Done x
[5]- Done x
这让我很惊讶,因为我已经习惯于将参数作为字符串进行echo和printf处理,而不是执行它们。
这方面的规则是什么?为什么后台进程是默认执行的,而前台进程需要显式调用?
例如:
~$ echo $(x)
!
除了引用参数之外,还有什么方法可以绕过shell中的这种行为吗?
我希望这次编辑不会混淆。我在第一篇文章中并没有真正理解这个问题。谢谢Davis Herring。
对于上下文,我希望能够将url作为参数粘贴到函数中,而不必在其周围加引号。有人能建议一种方法,在不调用命令解释器的情况下从控制台读取此字符串并将其传递给函数吗?
Cheers, bitrat