echo alias 打印环境变量和第一个参数之间的空格

echo alias 打印环境变量和第一个参数之间的空格

有一个奇怪的问题......我正在配置我的拱门设置,但我的一个别名不起作用......

alias es='echo $SCRIPTDEST/$1'

由于某种原因,它在 $SCRIPTDEST/ 和 $1 之间打印一个空格,破坏了一切。我该如何解决?

另外 $SCRIPTDEST 只是我所有脚本的位置。

另外,这里是我认为会有所帮助的任何相关输出的屏幕截图。如果还需要什么,请告诉我。

图片因不适合所有观众而被删除。含有轻微的恐怖成分。请用文字替换。

答案1

有这个问题在 Bash 中,何时使用别名、何时使用脚本以及何时编写函数?它解释了很多。不过,您的问题可以具体解决。

最重要的是:Bash 中的别名取代了别名细绳和另外一个细绳在进一步处理该行之前。没有逻辑;没有单独的$1特定别名。只有字符串替换

您的别名定义:

alias es='echo $SCRIPTDEST/$1'

现在如果你跑

es foo

那么es将被替换为echo $SCRIPTDEST/$1.接下来的所有内容都会保留,包括之前的空间foo。结果就像

echo $SCRIPTDEST/$1 foo

然后进一步评估。$1这是 shell 认为的内容,它与别名无关。从您的描述来看,它看起来$1扩展为一个空字符串。该变量没有被引用,这是另一个错误。

我猜你的想法foo变成了$1别名的上下文。如果是这样,当您写“$SCRIPTDEST/和之间的空格$1”时,您的意思实际上是“$SCRIPTDEST/$1和之间的空格foo”。这正是您在es和之间键入的空格foo

函数接受参数并将它们称为等$1$2以下函数执行我认为您希望从别名中获得的功能:

unalias es
es () {
   printf '%s\n' "$SCRIPTDEST/$1"
}

附加修复:引用,echo

相关内容