bash脚本获取参数,对其进行排序,修改并将其输出到文件中。 我也尝试将最后排序的参数保存在变量中,但是它不起作用。该变量为空。变量的分配在大括号内的管道“ while循环”中。
我尝试在脚本开始处引入变量,但没有效果。
#!/bin/bash
# Set work dir to place where the script located
cd "$(dirname "$0")"
# Read args
for arg in "$@"
do
echo "$arg"
done | sort | {
while read -r line
do
echo "$line" + "modifier"
last_sorted_arg="$line" # It does not work
done } > sorted_modified_args.txt
# Empty string - not Ok
echo "$last_sorted_arg"
sleep 3
我可以使用一个临时文件和两个循环来解决该问题,但是看起来不太好。有没有临时文件和两个循环的方法吗?
#!/bin/bash
cd "$(dirname "$0")"
for arg in "$@"
do
echo "$arg"
done | sort > sorted_args.txt
while read -r line
do
last_sorted_arg="$line"
done < sorted_args.txt
# Ok
echo "$last_sorted_arg"
# It works too
while read -r line
do
echo "$line" + "modifier"
done < sorted_args.txt > sorted_modified_args.txt
sleep 3
答案 0 :(得分:1)
局部变量在子过程中丢失。
编辑:删除了不起作用的代码,试图使工作接近原始代码。
排序方式可以不同:
#!/bin/bash
last_sorted_arg=$( printf "%s\n" "$@" | sort -n | tee sorted_modified_args.txt | tail -1)
echo "last=${last_sorted_arg}"