Joh*_*ohn 2 shell-script quoting variable
我编写了以下脚本:
#!/bin/bash
TEST=$1
TEST_1=$2
if [[ "$TEST" == e ]];then
echo $TEST_1
else
echo "Input is not e"
fi
Run Code Online (Sandbox Code Playgroud)
现在,如果我要跑:
sh test.sh e NS3#$xX$56M
Run Code Online (Sandbox Code Playgroud)
然后输出将是
NS3#56M
Run Code Online (Sandbox Code Playgroud)
这就是删除所有$xX$
字符。有什么办法可以获得包括特殊字符在内的所有字符吗?
Adm*_*Bee 11
原因是您没有正确引用您的输入。您传递给脚本$
的参数包含,并且您传递的参数不带引号(即简单地作为NS3#$xX$56M
),这意味着它将受到变量扩展的影响。这意味着解释你的 shell
sh test.sh e NS3#$xX$56M
Run Code Online (Sandbox Code Playgroud)
调用test.sh
脚本的命令将首先尝试$xX
用 shell 变量的内容(本地定义或导出为环境变量)xX
替换该部分,并且 - 因为可能没有 - 在它之前用“无”替换这部分将结果传递给您的脚本。但是,这是 shell 的正确功能,因此您的脚本基本上没有任何问题(如@roaima 所述)。
为防止出现此问题,请将字符串括在单引号中,这将禁用任何扩展:
sh test.sh e 'NS3#$xX$56M'
Run Code Online (Sandbox Code Playgroud)
作为脚本的一般说明:
test
而不是TEST
) - 这可以防止脚本变量与可能的基本环境变量之间发生不必要的冲突。shellcheck
,也可在许多 Linux 发行版上作为独立程序使用,以“校对”您的脚本;这将有助于防止许多错误。sh test.sh ....
Run Code Online (Sandbox Code Playgroud)
这将覆盖#!
-line 并使用sh
shell,它在许多系统上将是不理解[[ ... ]]
运算符的 POSIX 兼容 shell,例如要么使其可执行并将其调用为./test.sh
,要么明确使用bash test.sh
. 归档时间: |
|
查看次数: |
238 次 |
最近记录: |