Linux 转义bash变量
我有点受不了了。我在脚本顶部删除一个变量,然后创建一个文件作为脚本的一部分:Linux 转义bash变量,linux,bash,Linux,Bash,我有点受不了了。我在脚本顶部删除一个变量,然后创建一个文件作为脚本的一部分: app="testing" cat <<EOF >/etc/init.d/test #!/bin/bash args="--emperor $APPCONF/test/$APP.ini" EOF app=“测试” cat使用一致的情况。变量名区分大小写。除了使用一致的大小写($app不同于$app),您可能希望将变量名括在括号内-如果在变量值之间使用空格,则可能会出现问题,这被认为是一种良好的做法。
app="testing"
cat <<EOF >/etc/init.d/test
#!/bin/bash
args="--emperor $APPCONF/test/$APP.ini"
EOF
app=“测试”
cat使用一致的情况。变量名区分大小写。除了使用一致的大小写($app
不同于$app
),您可能希望将变量名括在括号内-如果在变量值之间使用空格,则可能会出现问题,这被认为是一种良好的做法。例如:
args="--emperor ${APPCONF}/test/${APP}.ini"
这样,$APPCONF
也不会与${APP}CONF
混淆。我希望这有帮助 我不太明白你的问题。我想你想以一个文件结束
/etc/init.d/test
包含以下文本:
#!/bin/bash
args="--emperor $APPCONF/test/testing.ini"
如果是这样,您的脚本应该是:
app="testing"
cat <<EOF >/etc/init.d/test
#!/bin/bash
args="--emperor \$APPCONF/test/$app.ini"
EOF
app=“测试”
cat假设你的方法是正确的。您希望将数据存储在数组中:
args=( --emperor "${appconf}/test/${app}.ini" )
run_something "${args[@]}"
然后将其转换为用于嵌入的字符串:
printf -v args_str '%q ' "${args[@]}"`
…并在heredoc中使用该字符串:
#!/bin/bash
args=( $args_str )
EOF
…除此之外,正在创建的脚本中的任何内容都希望将其扩展为数组:
args=( --emperor "${appconf}/test/${app}.ini" )
run_something "${args[@]}"
有关基本原理和详细信息,请参见。这与转义变量有什么关系?转义用于防止对某个内容进行评估,而不是强制对其进行评估。这是一个新手问题,我仍在学习。顺便说一句,BashFAQ#50与您在这里编写的代码非常相关:谢谢,dee。但是,这是唯一的问题吗?我看到有人提到过这样做:args=“--emperor$APPCONF/test/\$APP.ini”
仅当您希望输出中有“$”时才这样做,而不是表示您希望扩展变量。试一试。在某些情况下,这是没有帮助的——如果APPCONF
的目录名包含空格怎么办?我不是100%确定,但这不应该用双引号括起来吗。。。老实说,我从来没有认真考虑过这个问题,所以谢谢你提出来:)双引号处理赋值的结尾,但不是你实际尝试在某个地方使用参数列表的那一面。当您使用它时,需要强制它在--emperon
和文件名之间的空格上拆分字符串;在扩展的APPCONF
中不拆分任何空格的情况下执行此操作是很棘手的。顺便说一句,$app
与${app}
在处理空格方面没有任何区别。如果您想区分扩展参数的结束位置--${foo}bar
vs$foobar
,或者如果您想执行一些奇特的PE操作--${foo//bar/baz}
,则需要更详细的语法,例如——但在这里的简单情况下,每个要展开的变量名后面都跟有一个在POSIX变量名中不合法的字符,这是不必要的。