LINUX.ORG.RU

И снова этот bash

 


0

2

Пишу в терминале:

piyavking@piyavking-desktop:~$ i=$(cat file | head -n 2 | tail -n 1);echo $i
на частотах мчс аншлаг
- отлично, имею выхлоп строки файла

Ок, написал в скрипте:

#!/bin/bash

function widthstring {
echo $1
}

string=$(cat $1 | head -n 2 | tail -n 1)
widthstring $string

Пишу:

piyavking@piyavking-desktop:~$ script.sh file
на
- имею вместо всей строки только её первое слово.

Где я опять ошибаюсь?

★★★★

хороший тон

- cat $var
+ cat "${var}"

А вообще позиционный параметр передавать так:

script.sh "строка из слов и пробелов"
Umberto ★☆
()
Последнее исправление: Umberto (всего исправлений: 4)

в кавычках задавай переменную!

teod0r ★★★★★
()

умвр!

$ i=$(cat file | head -n 2 | tail -n 1);echo $i
# Distributed under the terms of the GNU General Public License v2
$ sh test file
# Distributed under the terms of the GNU General Public License v2

А ты потерял скобки.

diff -u test test~ 
--- test	2013-10-14 12:50:02.208242338 +0300
+++ test~	2013-10-14 12:48:39.579275342 +0300
@@ -1,8 +1,9 @@
 #!/bin/bash
 
 function widthstring {
-echo $1
+echo "${1}"
 }
 
 string=$(cat $1 | head -n 2 | tail -n 1)
-widthstring $string
+widthstring "${string}"
init_6 ★★★★★
()
Ответ на: комментарий от piyavking

Век живи - век учись. Спасибо большое!

Да и вот эта фиговина echo "${1}" перебор вызванный постоянным использованием gentoo к примеру обрати внимание на переменные и сам синтаксис ebuild-ов. Можно проще echo "$1" но уже просто не охота руку сбивать ;)

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Ну, ты чего, мне до этих материй ещё долбить и долбить)

Хотя общую мысль примерно понял)

piyavking ★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от init_6

Да и вот эта фиговина

echo "${1}"
перебор вызванный постоянным использованием gentoo

ИМХО лучше всегда так писать, чтобы выглядело одинаково. Всё равно где-то нужно будет вставить переменную внутри слова, типа

echo "abyr${1}walg"

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

mironov_ivan ну я для себя давно решил делать с переменными именно так echo "${1}" потому что тогда четко видно разницу с обычными строками и так гораздо проще ловить баги.

init_6 ★★★★★
()
Последнее исправление: init_6 (всего исправлений: 1)
Ответ на: комментарий от Bagrov

Не объяснишь в двух словах, почему без скобок не работает?

Начинай читать вот отсюда BashGuide или отсюда ABSG а ответ на твой вопрос в man echo --> Echo the STRING(s) to standard output. а чтобы в bash переменная стала строкой ее нужно взять в скобки.

init_6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.