Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何从每行输出一次的变量运行命令?--猛击_Bash_Shell_For Loop_While Loop_Scripting - Fatal编程技术网

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