Bash 如何从每行输出一次的变量运行命令?--猛击
谢谢你抽出时间来帮忙 我试图用一个变量作为参数运行一次命令。问题是,变量有多行,我需要为每行运行一次命令作为参数 示例脚本Bash 如何从每行输出一次的变量运行命令?--猛击,bash,shell,for-loop,while-loop,scripting,Bash,Shell,For Loop,While Loop,Scripting,谢谢你抽出时间来帮忙 我试图用一个变量作为参数运行一次命令。问题是,变量有多行,我需要为每行运行一次命令作为参数 示例脚本 VAR1=command1 "${VAR1}" | xargs -L1 -d "\n command2$i VAR1的示例输出是 1111 2222 3333 4444 5555 我需要每行运行一次command2,所以 command2 1111 command2 2222 command2 3333 command2 4444 com
VAR1=command1
"${VAR1}" | xargs -L1 -d "\n command2$i
VAR1的示例输出是
1111
2222
3333
4444
5555
我需要每行运行一次command2,所以
command2 1111
command2 2222
command2 3333
command2 4444
command2 5555
我也试过这个
VAR1=command1
"${VAR1}" | while read line ; do command2$i
还有这个
VAR1=command1
"${VAR1}" | while read line ; do command2"${VAR1}"
谢谢你抽出时间 对于xargs,可以使用“here字符串”:
对于循环也是如此,但您需要真正使用循环变量:
while read -r line ; do
command2 "$line"
done <<< "$var1"
什么是
$i
?它应该是do command2“$line”
,并且在command2
之后需要一个空格,您也忘记了;在读取-r行时完成
“${VAR1}”;执行命令2“$line”;完成
如果变量不包含终止换行符,则可能需要使用printf“%s\n”
。(另一方面,@gordondavisson我测试了解决方案,它似乎在没有换行符的情况下工作。xargs
将允许缺少最终换行符(至少我测试的版本是这样),但是。@gordondavisson:你说得对,我的测试中有一个错误。
printf '%s\n' "$var1" | xargs -L1 command2
while read -r line ; do
command2 "$line"
done <<< "$var1"
printf '%s\n' "$var1" | while read -r line ; do
command2 "$line"
done