我command not found
在此代码中收到此错误。我想打印一个句子的第一个单词
第一个代码(需要的结果= 1)
abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found
Run Code Online (Sandbox Code Playgroud)
第二个代码(需要的结果= mp4)
abc="mp4 hello world"; L=$($abc|awk '{print $1}'); echo $L
No command 'mp4' found, did you mean:
Command 'mpp' from package 'makepp' (universe)
Command 'mpy' from package 'yorick-mpy-mpich2' (universe)
Command 'mpy' from package 'yorick-mpy-openmpi' (universe)
Command 'mpc' from package 'mpc' (universe)
Command 'm4' from package 'm4' (main)
Command 'mp4h' from package 'mp4h' (universe)
Command 'mpv' from package 'mpv' (universe)
Command 'mpd' from package 'mpd' (universe)
Command 'mp' from package 'mp' (universe)
Command 'mpb' from package 'mpb' (universe)
Run Code Online (Sandbox Code Playgroud)
您需要echo
将该变量传递abc
给 STDOUT,以便将awk
其用作 STDIN。尽管在这种情况下您会逃脱,但始终引用变量(和命令替换),除非您有很好的理由不这样做(例如,您希望进行路径名扩展和单词吐出):
$ abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
1
$ abc="mp4 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
mp4
Run Code Online (Sandbox Code Playgroud)
您还可以在此处使用字符串:
$ abc="1 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
1
$ abc="mp4 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
mp4
Run Code Online (Sandbox Code Playgroud)
注意:在您使用的变量周围加上引号是一个很好的做法,这样它就是您拥有的唯一变量。也这样你就不会引入新的变量。
还有一些其他方法可以达到相同的结果。
我在下面列出了一些。
abc="1 hello world"; echo "$abc" | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
或者
abc="mp4 hello world" && echo "$abc" | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一个新变量,根据命令替换,使用反引号“`”和“$(command)”仍然是实现您所追求的结果的有效方法。可以在此处找到更多信息。
带反引号:
abc="mp4 hello world"; L=`echo "$abc" | awk '{print $1}'`; echo "$L"
Run Code Online (Sandbox Code Playgroud)
使用“$(命令)”:
abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
Run Code Online (Sandbox Code Playgroud)
两者都会产生一个新变量“$L”,该变量被分配给您指定的内容。