在Unix(tcsh)中,我在别名中引用了两个不同符号的命令行参数 - $1和\!:1.
但是我注意到如果我尝试保存$1到环境变量,它就不会被保存.但是\!:1会得到保存.
alias hear 'setenv x \!:1 && echo $x'
--> hear that
that
--> echo $x
that
alias oh 'setenv x $1 && echo $x'
--> oh no
no
--> echo $x
Run Code Online (Sandbox Code Playgroud)
当$ 1用于存储值时,$ x的回显没有显示任何内容.这是什么原因?
supergra已经回答了主要观点,但它可能会让你想知道为什么你看到你的文字回应给你,即使变量没有设置.也就是说,你echo $x的别名结尾了,确实你看到了no什么时候进入oh no,但这并不意味着echo回应变量.
正在发生的事情有是echo被打印(空)变量,但随后echo也被抓了"不"的一部分单独.如果你这样做alias tmp 'echo $1'并尝试tmp hi打印"hi",因为它就好像你做了"echo $ 1 hi".
为了更清楚地看到这一点,试着alias tmp 'echo abc $1 def '做tmp hi一遍,你会打印"ABC DEF喜".同样,如果您alias tmp 'echo $1 & which '再次尝试使用它,除非您有一个命名命令,否则应该hi看到"hi:Command not found"之类的内容.或者,如果你这样做,tmp ls你会看到输出which ls.
还有一个例子:尝试alias tmp 'echo $1 & '并tmp hi看到它实际上尝试执行hi就好像它是一个命令,如果你不期望那样,这可能是危险的.