【问题标题】:Unix tcsh - alias using command line argument $1 versus \!:1Unix tcsh - 使用命令行参数 $1 与 \!:1 的别名
【发布时间】:2013-10-19 20:11:19
【问题描述】:

在 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

当 $1 用于存储值时,$x 的回显上没有显示任何内容。这是什么原因?

【问题讨论】:

    标签: unix tcsh


    【解决方案1】:

    $1 返回传递给包含alias 命令的脚本 的第一个参数。因此,如果您从命令行调用它,它不会返回任何内容。

    \!:1 返回传递给别名命令的第一个参数,这显然是您应该使用的。

    【讨论】:

      【解决方案2】:

      supergra 已经回答了主要问题,但它可能会让您想知道为什么即使未设置变量,您也会看到您的文本回显给您。也就是说,您的别名末尾有echo $x,当您输入oh no 时确实会看到no,但这并不意味着echo 正在回显变量。

      那里发生的情况是echo 正在打印(空)变量,但随后echo 也正在捕获“否”部分单独。如果您执行alias tmp 'echo $1' 并尝试tmp hi,您将打印“hi”,因为就像您执行了“echo $1 hi”一样。

      要更清楚地看到这一点,请尝试alias tmp 'echo abc $1 def ' 并再次执行tmp hi,您将打印“abc def hi”。同样,如果您尝试 alias tmp 'echo $1 & which ' 并再次使用它,除非您有一个名为 hi 的命令,否则您应该看到类似“hi: Command not found”的内容。或者如果您执行tmp ls,您将看到which ls 的输出。

      再举一个例子:尝试alias tmp 'echo $1 & 'tmp hi 看看它实际上是在尝试执行hi,就好像它是一个命令,如果你没有预料到这可能会很危险。

      【讨论】:

      • 奇怪的是,我在阅读接受的答案后确实有这个问题。
      猜你喜欢
      • 2014-03-10
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      相关资源
      最近更新 更多