【问题标题】:How to pass a string as command line argument for bash script? [duplicate]如何将字符串作为 bash 脚本的命令行参数传递? [复制]
【发布时间】:2012-10-21 23:03:36
【问题描述】:

我想将一个字符串作为命令行参数传递给 bash 脚本; 我的 bash 脚本就是:

>cat test_script.sh

for i in $*
do 
echo $i
done

我输入了

bash test_script.sh test1 test2 "test3 test4"

输出:

test1
test2
test3
test4

我期待的输出:

test1
test2
test3 test4

我尝试使用反斜杠 (test1 test2 "test3\ test4") 和单引号,但没有得到预期的结果。

如何获得预期的输出?

【问题讨论】:

  • 输出和预期输出不一样吗?

标签: bash


【解决方案1】:

你需要使用:

for i in "$@"
do echo $i
done

甚至:

for i in "$@"
do echo "$i"
done

第一个会在参数中丢失多个空格(但会将参数的单词保持在一起)。第二个保留参数中的空格。

您也可以省略in "$@" 子句;如果你写 for i 则暗示它(但就我个人而言,我从不使用速记)。

【讨论】:

    【解决方案2】:

    尝试使用 printf

    for i in $* do $(printf '%q' $i) done
    

    【讨论】:

    • 这在你使用$*时不起作用;你必须使用"$@",显式或隐式。
    • 更全面的解释可能会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多