Bash目录路径中的变量空间

时间:2013-06-14 06:15:47

标签: bash variables whitespace alias

如何在目录路径中使用变量时删除空白区域。 例如,我正在尝试

alias test='echo /david/$1'

当我尝试

test hhh

这会产生

/david/ hhh

在变量前面有一个空格。看起来很简单,但我找不到解决方案。

2 个答案:

答案 0 :(得分:6)

alias不进行参数扩展。完全没有。改为使用函数。

test (){
  echo "/david/$1"
}

答案 1 :(得分:1)

man

  

在替换文本中没有使用参数的机制。如果需要参数,则应使用shell函数(参见下面的函数)。 [...]对于几乎所有目的,别名都被shell函数取代。

作为别名扩展的一部分,在扩展字符串的末尾添加了一个空格(否则无法添加任何参数,例如alias ll='ls -l'。所以ll -a将扩展为ls -l-a这是错的)。所以我认为没有解决这个问题的任何其他方法,然后使用函数Ignacio提出。

无论如何使用test作为函数或别名不是最好的事情,因为它是内置命令(如果没有别名或命名函数)。您可以使用内置的type bash来检查助记符的解释方式。

我定义了一个别名和一个名为test的函数:

$ type test
type test
test is aliased to `echo /xxx/'

$ type -a test
type -a test
test is aliased to `echo /xxx/'
test is a function
test () 
{ 
    echo "/yyy/$1"
}
test is a shell builtin
test is /usr/bin/test