mic*_*con 6 bash parameter shell-script
我有一个文件,其中包含随时间更新的数据 (mydata)。该文件如下所示:
1 2 3
Run Code Online (Sandbox Code Playgroud)
有了这个文件,我想这样做(基本上将每个数字作为单独的参数处理):
myscript.sh 1 2 3
Run Code Online (Sandbox Code Playgroud)
由于数据不是静态的而是随着时间的推移更新,我想运行这个命令:
myscript.sh "$(cat mydata)"
Run Code Online (Sandbox Code Playgroud)
但是我看到 ./myscript.sh: line 1: 1: command not found
我该怎么办?
"$(cat mydata)"
计算结果为包含文件内容mydata
减去任何尾随换行符的字符串。您想要的是文件中以空格分隔的单词列表。因此,一次,在双引号之外使用命令替换:
myscript.sh $(cat mydata)
Run Code Online (Sandbox Code Playgroud)
为了获得额外的稳健性,请关闭通配符,以便如果 inmydata
中的列包含其中一个字符\[*?
,则不会将其解释为文件名模式。您可能还想设置IFS
为包含单词分隔符,但默认值(ASCII 空格)应该正是您所需要的。
(set -f; myscript.sh $(cat mydata))
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用read
内置函数。这会读取第一行并忽略其余部分(您可以在上面通过替换cat
为head -n 1
)。
read -r one two three rest <mydata
myscript.sh "$one" "$two" "$three"
Run Code Online (Sandbox Code Playgroud)
这通常xargs
是为了:
xargs myscript.sh < mydata
Run Code Online (Sandbox Code Playgroud)
xargs
将输入视为空白或换行符分隔的单词,其中使用单引号、双引号或反斜杠来转义分隔符。xargs
将根据需要多次运行该命令,以避免传递给命令的参数(和环境)的大小受到限制。
归档时间: |
|
查看次数: |
13437 次 |
最近记录: |