我正在努力掌握位置参数。似乎什么都不起作用,然后我决定用 echo 做一些小事情来看看它是否真的起作用,但事实并非如此。有人能解释一下为什么吗? (我将在这里省略 shebang 行和评论,直入主题)
if [[ -e $1 ]]; then
echo $#
echo $1
fi
当我输入脚本名称并后跟一个或多个参数时,它不会返回任何内容。然而,下面的内容正如预期的那样返回了一切。我真的很不知所措。
if [[ -e $0 ]]; then
echo $#
echo $1
fi
为什么除了 $0 之外的参数无法识别?
答案1
Bash 的手册页:
CONDITIONAL EXPRESSIONS
Conditional expressions are used by the [[ compound command
and the test and [ builtin commands to test file attributes
and perform string and arithmetic comparisons.
-e file
True if file exists.
因此,如果您传递一个与现有文件不匹配的字符串作为第一个参数,则将[[ -e $1 ]]
为 false。
然而,由于$0
通常包含 shell 或脚本的名称,因此[[ -e $0 ]]
更有可能是真实的。
(但并非在所有情况下。交互式 shell 可以作为登录 shell 启动,并带有前导破折号$0
(例如-/bin/bash
),并且类似的内容/bin/sh -c '...' foo bar
也设置$0
为foo
,您可以在其中放置任何您想要的内容。)
您可能想要的测试是-n
:
string
-n string
True if the length of string is non-zero.
所以,[[ -n $1 ]]
或者只是[[ $1 ]]
。