下面的代码测试字符串中的字符是否与正则表达式匹配。
str=")Y"
c="${str:0:1}"
if [[ $c =~ [A-Za-z0-9_] ]]; then
echo "YES"
output=$c
else
echo "NO"
output="-"
fi
echo $output
我正在和
source script-name.sh
然而,与预期的打印输出不同
NO
-
我得到一个没有破折号的空行
NO
我知道这个问题是围绕着我(重新)分配输出变量的方式,也就是我对问题的处理。
1.怎么做才合适呢?
1.为什么源效用具有这样的蕴涵?
UPD_1:用于Mac的zsh,而不是bash UPD_2:仅当通过“source”实用程序(如“source www. example. COM“)运行脚本时,才会出现此问题script-name.sh
使用.“/script-name.sh“运行也会产生正确的结果。
2条答案
按热度按时间bfnvny8b1#
您的问题可以简化为在zsh命令行上执行
它也不输出任何内容。类似地,
将仅输出 x 而不是
- x
。这并不取决于您是否使用Mac。如果您要执行
的
(the后者使用外部程序
echo
)将打印破折号。因此,你可以在你的
script-name.sh
中改变一的
你会没事的。
echo
命令时对此进行了说明:第一个破折号(可能跟在选项后面)不打印,但它后面的所有内容都作为参数打印。
因此,在zsh中,至少在打印变量时,为了安全起见,最好也使用一个单独的破折号。
rjzwgtxy2#
您的代码给出了RHEL7上bash 4.2.46的预期输出。您可能使用了zsh吗?
请参阅echo 'the character - (dash) in the unix command line
编辑:好的,如果是zsh,您可能必须使用一个hack:
或者使用printf: