Я получаю эту command not found
ошибку в этом коде. Я хочу напечатать первое слово предложения
Первый код (нужен результат = 1)
abc="1 hello world"; L=$($abc|awk '{print $1}'); echo $L
1: command not found
Второй код (нужен результат = 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)
Вам нужно 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
можно также использовать здесь строки:
$ abc="1 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
1
$ abc="mp4 hello world"; L="$(awk '{print $1}' <<<"$abc")"; echo "$L"
mp4
ПРИМЕЧАНИЕ: это - хорошая практика для помещения кавычек вокруг переменной, Вы работаете с тем, так, чтобы это была единственная переменная, которую Вы имеете. Также так, чтобы Вы не представляете новые переменные в.
существуют некоторые другие способы достигнуть того же результата.
у меня есть некоторые упомянутые ниже.
abc="1 hello world"; echo "$abc" | awk '{print $1}'
или
abc="mp4 hello world" && echo "$abc" | awk '{print $1}'
или если Вы хотите новую переменную, согласно замене команды, обе обратных галочки использования "`"; и "$ (команда)" являются все еще допустимыми способами достигнуть результатов, которые Вы после. Больше информации может быть найдено здесь .
с метками обратной галочки:
abc="mp4 hello world"; L=`echo "$abc" | awk '{print $1}'`; echo "$L"
с "$ (команда)":
abc="1 hello world"; L="$(echo "$abc" | awk '{print $1}')"; echo "$L"
оба произведут новый переменный "$L", который присвоен тому, что Вы определили.
Все, в чем Вы нуждаетесь, должно добавить echo $abc
вместо $abc
, как так:
abc="1 hello world"; L=$(echo $abc|awk '{print $1}'); echo $L
Проблема с исходным кодом, как был упомянут, состоит в том, что он пропускает эхо. Однако, хотя другой плакат упомянул, что необходимо всегда заключать переменные в кавычки, это неправильно. Часто заключение в кавычки переменной поможет разрешить возможное неоднозначное имя переменной, оно часто вызывает другие проблемы путем вмешательства в другое заключение в кавычки. Корректный способ определить переменную, в таких случаях, был бы использованием фигурных скобок вокруг имени переменной, не заключил бы в кавычки вокруг целой переменной. Например, исходный код мог быть переписан как: abc="1 hello world"; L=$(echo ${abc}|awk '{print $1}'); echo ${L}
, О, @heemayl, Вы забыли заключать 1$ в кавычки в своем примере, который является, точно так же как помещение кавычки вокруг той переменной не работает.
В Вашей команде ... $($abc|awk '{print $1}'); ...
содержание $abc
выполняется как команда. Поэтому ошибка.
можно протестировать это в терминале с:
$ 1 your text
1: command not found
Исправляют Вашу версию:
abc="1 hello world"; L=$(echo "$abc"|awk '{print $1}'); echo $L
или использование более короткая версия:
awk '{print $1}' <<< $(echo "1 your text")
Пример
% awk '{print $1}' <<< $(echo "1 hello world")
1
% awk '{print $1}' <<< $(echo "mp4 hello world")
mp4