有一个奇怪的问题......我正在配置我的拱门设置,但我的一个别名不起作用......
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"
}