如何在类似 ANSI C 的字符串中扩展 env var 并使用文字换行符?
How to expand env var in ANSI C-like string and use literal newline?
我正在使用 herestring 将字符串(两个带换行符的输入值)作为标准输入传递给安装程序可执行文件。
例如,使用两个输入 /var/tmp
和 yes
执行安装程序
#!/bin/bash
# run_installer.sh
./installer <<< $'/var/tmp\nyes\n'
但是,我需要参数化输入。
例如
#!/bin/bash
# run_installer.sh
export INPUT1=""
export INPUT2=""
# does not work, it evaluates literally to: ./installer ${INPUT1} ${INPUT2}
./installer <<< $'${INPUT1}\n${INPUT2}\n'
这样我就可以像这样执行它:
./run_installer /var/tmp yes
被标记为 的问题没有回答这个问题。它在概念上相似,但差异足以保证它自己的问题。
尝试:
./installer <<< "${INPUT1}"$'\n'"${INPUT2}"$'\n'
或:
EOL=$'\n'
./installer <<< "${INPUT1}${EOL}${INPUT2}${EOL}"
无论如何,不需要最后一个 EOL,因为它是自动插入的。
我正在使用 herestring 将字符串(两个带换行符的输入值)作为标准输入传递给安装程序可执行文件。
例如,使用两个输入 /var/tmp
和 yes
#!/bin/bash
# run_installer.sh
./installer <<< $'/var/tmp\nyes\n'
但是,我需要参数化输入。
例如
#!/bin/bash
# run_installer.sh
export INPUT1=""
export INPUT2=""
# does not work, it evaluates literally to: ./installer ${INPUT1} ${INPUT2}
./installer <<< $'${INPUT1}\n${INPUT2}\n'
这样我就可以像这样执行它:
./run_installer /var/tmp yes
被标记为
尝试:
./installer <<< "${INPUT1}"$'\n'"${INPUT2}"$'\n'
或:
EOL=$'\n'
./installer <<< "${INPUT1}${EOL}${INPUT2}${EOL}"
无论如何,不需要最后一个 EOL,因为它是自动插入的。