相关疑难解决方法(0)

理解“IFS= read -r line”

我显然明白可以为内部字段分隔符变量添加值。例如:

$ IFS=blah
$ echo "$IFS"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

我也明白这read -r line会将数据保存stdin到名为的变量line

$ read -r line <<< blah
$ echo "$line"
blah
$ 
Run Code Online (Sandbox Code Playgroud)

但是,命令如何分配变量值?它是否首先存储来自stdinto 变量的数据line,然后赋予lineto 的值IFS

bash shell-script

94
推荐指数
3
解决办法
10万
查看次数

如何反转shell参数?

我知道可以"$@"使用数组进行反转:

arr=( "$@" )
Run Code Online (Sandbox Code Playgroud)

使用此答案,反转数组。

但这需要一个具有数组的外壳。

也可以使用tac

set -- $( printf '%s\n' "$@" | tac )
Run Code Online (Sandbox Code Playgroud)

但是,断裂,如果参数有空格,制表符或换行符(假设的缺省值$IFS),或者包含通配符(除非通配符被禁用预先)并移除空元素,并需要GNUtac命令(使用tail -r是GNU系统的稍微更便携式外但某些实现在大输入时失败)。

有没有一种方法可以在不使用数组的情况下可移植地反转 shell 位置参数,即使参数包含空格、换行符或通配符或可能为空也能正常工作?

shell-script posix

10
推荐指数
3
解决办法
2036
查看次数

标签 统计

shell-script ×2

bash ×1

posix ×1