bash 函数处理命令行参数中的空格

bash 函数处理命令行参数中的空格

始终键入c d..c d ..向上移动一个目录。

将函数放在我的 .bash_profile 的下面,但只有空白之前的第一个字符 -“c” 被解释,而不是整个参数集 ( c d..), - 我认为应该只有两个。抛出错误

bash: c: - command not found

在 bash 4.2.46 上。

想要解决这个问题,因为在命令行上用空格解释参数在未来会有更多潜在的用处。

功能:

changedir() {  
    if [[  $@ = "c d.." ]]; then  
        command cd ..  
    else  
if [[  $@ = "c d.." ]]; then  
        command cd ..  
    fi   
fi   
}

另外,采用整个参数字符串哪个更好 - 包括空格: $*$@

答案1

好吧,该函数名为changedir,因此它只会在 shell 收到命令 时运行changedir [whatever]。并非每次运行任何命令时都会运行。您可以滥用陷阱DEBUG来为您输入的每条命令行运行一个函数,但我们这里不需要这样做。

相反,只需创建一个名为 的函数c,该函数cd ..在给定参数d..、 或d和时运行..

c() {
    if [[ $1 = 'd..' ]] ||
       [[ $1 = 'd' && $2 = '..' ]]; then
        command cd -- ..
    else
        echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
    fi 
}

或者,您可以shopt -s autocd在 Bash 中使用,这将使 shell 在仅给出目录名称时转到目录。因此,foobar会执行相同的操作cd foobar(除非存在命令foobar),并且只会..进入目录。

相关内容