【发布时间】:2019-04-11 00:34:51
【问题描述】:
我在解析选项时尝试接受一个空格分隔的字符串来代替 $OPTARG
例如
./script -k '1 2 ad'ias'
正如所见,第三个字符串可以包含任何特殊字符。有没有一种方法可以忽略中间的引号,因为我想解析整个字符串并处理一些选项
尝试插入 \ 字符,但这不适用于我的情况,因为我无法在字符串中插入任何字符。
while getopts "a:k:" option
do
echo "${option}"
case ${option} in
a)
function_a ${OPTARG} # <-- no quotes
;;
k)
function_k "${OPTARG}" # <-- quotes
;;
esac
done
【问题讨论】:
-
用于运行脚本的命令必须是有效的 shell 语法;您给出的示例是 not 有效的 shell 语法(不正确的引用),并且您的脚本无法改变这一点。如果您尝试将单引号作为参数的一部分传递给脚本,有许多可用的引用方法:您可以使用
./script -k "1 2 ad'ias"或./script -k 1\ 2\ ad\'ias或./script -k '1 2 ad'"'"'ias'或./script -k $'1 2 ad\'ias'或.. . 不管怎样,一旦你的脚本得到参数,它真正需要做的就是在使用它时用双引号括起来(例如"${OPTARG}")。 -
是的,但我的问题是我的输入可以是所有特殊字符的值。这就是为什么我来这里看看是否有其他可以讨论的想法
-
我不清楚您在哪里遇到了麻烦。是在构造一个将特殊字符传递给脚本的命令,还是在脚本收到参数后如何处理它们?顺便说一句,您不能在参数中传递一个字符:ASCII NUL(十六进制 00)。
-
哦,我在发送多个带空格的参数时遇到了麻烦。假设我正在发送可能包含上述所有字符的密钥。然后将它们作为字符串处理有点不可能
-
我可能只想像 ./script -a 12 34 kla#42@!' 2 M rtqas;::#
标签: linux bash shell scripting