gpt4 book ai didi

linux - 无法识别 Shell 脚本 -e 命令行参数

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:16 31 4
gpt4 key购买 nike

无法识别将 -e 用作命令 bash 文件中的标志。假设我们有一个名为 server.sh 的 bash 文件,它只回显所有传递的参数:

server.sh

echo "$@"

以下是 server.sh-e 作为第一个参数执行时的结果:

./server.sh -e hello ## output: hello
./server.sh -eeeee world ## output: world
./server.sh -eeeeeeeeeeeee what ## output: what

除以 -e 开头的参数外,任何其他参数均有效。谁能告诉我发生这种情况的原因?有没有办法让 -e 参数在 server.sh 中被识别?

最佳答案

这里有一个更简单的方法来重现您的问题:

$ echo "-e" "foo"
foo # What happened to "-e"?

echo 将您的预期输出解析为选项是 POSIX 在可移植脚本中针对此命令发出警告的原因之一。

如果您尝试转储参数以用于日志记录和调试目的,您可以使用 bash 的 printf %q:

 #!/bin/bash   
# (does not work with sh)
printf '%q ' "$0" "$@"
printf '\n'

这将转义输出参数,您可以将其复制粘贴回 shell 以稍后重现(引用更改,但参数将相同):

$ ./myscript -e -avx --arg "my long arg" '(!#%^)(!*'
./myscript -e -avx --arg my\ long\ arg \(\!#%\^\)\(\!\*

如果您真的想以不明确的形式写出由空格分隔的参数,您可以使用:

#!/bin/sh
# works with bash and POSIX sh
printf '%s\n' "$*"

这导致:

$ ./myscript -e -avx --arg "my long arg" '(!#%^)(!*'
-e -avx --arg my long arg (!#%^)(!*

关于linux - 无法识别 Shell 脚本 -e 命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44595883/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com