为了了解另一个答案: find / -type d -print0 | while read -r -d ''; do ls -ltr "$dir" | sed '$!d' 第一步是了解read命令的-r选项的用法。 首先,我认为只需执行即可 man read 查找-r选项的含义,但是我意识到手册页根本不包含对选项的任何解释,因此我用谷歌搜索了一些read -t,read -p示例,但没有read -r。
我读到写这样的东西很不好,for line in $(command)相反,正确的方法似乎是: command | while IFS= read -r line; do echo $line; done 这很好。但是,如果要迭代的是变量的内容而不是命令的直接结果,该怎么办? 例如,假设您创建以下文件quickfox: The quick brown foxjumps\ over - the lazy , dog. 我希望能够做这样的事情: # This is just for the example, # I could of course stream the contents to `read` variable=$(cat quickfox); while IFS= read …
我需要通过管道它运行一个脚本bash用wget(而不是直接使用bash运行它)。 $ wget -O - http://example.com/my-script.sh | bash 它不起作用,因为我的脚本中包含read语句。由于某些原因,在进行bash传输时这些命令不起作用: # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: <prompt> # But not when piping - returns immediately $ echo 'read …
我有一个用例,我需要在每次迭代开始时读入多个变量,并将用户的输入读入循环。 我不知道如何探索的解决方案的可能路径- 对于分配,请使用另一个文件句柄而不是stdin 使用for循环而不是... | while read ......我不知道如何在for循环内分配多个变量 echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done
如果我尝试执行 read -a fooArr -d '\n' < bar 退出代码为1-即使它完成了我想要的操作;将每行放入bar数组的元素中fooArr(使用bash 4.2.37)。 有人可以解释为什么会这样吗 我发现了其他解决方法,例如下面的方法,所以这不是我要的。 for ((i=1;; i++)); do read "fooArr$i" || break; done < bar 要么 mapfile -t fooArr < bar