Удерживайте вывод sed в переменной [duplicate]

Удаление Tonido имеет два этапа в Linux.

Удалить исполняемые файлы и библиотеку Tonido (обычно в папке /usr/local/tonido (Tonido также может быть установлен в другом месте пользователем во время установки). Удалить все локальные данные сохраненные Tonido и Profile, удалив
rm -rf ~/tonido
21
задан 13 August 2011 в 18:07

28 ответов

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 24 July 2018 в 21:18
  • 1
    Спасибо, что это работает, но я не понимаю, что делает ... > /dev/null в этом контексте. Вывод diff будет goto / dev / null, но разве это не так? – Jiew Meng 13 August 2011 в 18:48
  • 2
    Функция diff выдаст все различия между файлами на вашем экране и & gt; / dev / null гарантирует, что вывод команды будет перенаправлен в забвение. Значение if все равно выполняется на основе результата. – Rinzwind 13 August 2011 в 18:51
  • 3
    Оператор if проверяет код выхода команды diff. 0 означает, что никаких различий не обнаружено, а 1 означает наличие одного или нескольких различий. – Knut Eldhuset 15 May 2012 в 12:38

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 1 August 2018 в 00:23

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 2 August 2018 в 19:20

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 3 August 2018 в 21:41

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 5 August 2018 в 06:04

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 6 August 2018 в 23:17

Это работает:

if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi

Если вы используете переменную вместо echo, вы можете удалить ветвь else: установите переменную в false до if и сохраните 2 строки Код.

Если вы хотите на самом деле поместить результат в переменную, используйте:

some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"

Включая мой тест, чтобы увидеть, действительно ли он работает:

rinzwind@discworld:~$ touch 1 rinzwind@discworld:~$ touch 2 rinzwind@discworld:~$ more test if diff 1 2 >/dev/null; then echo "Passed $x"; else echo "Failed $x"; fi rinzwind@discworld:~$ ./test Passed rinzwind@discworld:~$ vi 2 rinzwind@discworld:~$ more 2 2 rinzwind@discworld:~$ ./test Failed

На части >/dev/null: >/dev/null 2>&1 отправит вывод на >/dev/null, а 2>&1 отправит стандартные ошибки в один и тот же файл (&1 означает «использовать первый параметр») перед этой командой (так он также использует /dev/null).

sidenote: sdiff будет показывать бок о бок diff:

sdiff 1 2 1 1 2 2 3 3 4 4 5 5 7 7 > 8 9 9 10 10
18
ответ дан 9 August 2018 в 03:43

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 24 July 2018 в 21:18

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 24 July 2018 в 21:18

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 24 July 2018 в 21:18

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 1 August 2018 в 00:23

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 1 August 2018 в 00:23

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 1 August 2018 в 00:23

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 2 August 2018 в 19:20

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 2 August 2018 в 19:20

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 2 August 2018 в 19:20

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 3 August 2018 в 21:41

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 3 August 2018 в 21:41

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 3 August 2018 в 21:41

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 5 August 2018 в 06:04

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 5 August 2018 в 06:04

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 5 August 2018 в 06:04

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 6 August 2018 в 23:17

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 6 August 2018 в 23:17

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 6 August 2018 в 23:17

Если вы хотите знать, являются ли два файла одинаковыми или отличаются (но не важно, какая разница на самом деле), cmp более подходит.

if cmp -s file1 file2; then echo "Equal"; else echo "Not equal"; fi
3
ответ дан 9 August 2018 в 03:43

a) Вывод команды 1 может быть задан с помощью

output=$(diff "helloworld$x.out" "output/helloworld$x.out")

или с обратными окнами, но это не рекомендуется, потому что вы не можете их вложить, и их может быть трудно отличить от апострофов, в зависимости от шрифта:

output=`cmd1`

b) Вместо того, чтобы записывать в файл, а затем читать этот файл (или захватывать вывод, а затем эхом его), вы должны использовать прямой канал:

cmd1 > file cat file | cmd2 output=$(cmd1) echo "${output}" | cmd2

=>

cmd1 | cmd2

, но в вашем примере вы не заинтересованы в выходе, но результат программы - это сработало?

diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"

Чтобы прочитать об использовании & amp; & amp; и || найдите «ярлык AND и ярлык OR».

Чтобы сохранить вывод чистым, вы можете перенаправить вывод «diff» в никуда:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"

Чтобы получить успех и оценить это позже, вы сохраняете результат последней команды в переменной с $ ?:

diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null result=$? # do something else case $result in 0) echo success ;; *) echo failure ;; esac
6
ответ дан 9 August 2018 в 03:43

diff может даже полностью отключить вывод, за исключением сообщения «Файлы / bin / bash и / bin / sh differ» с использованием кода ниже.

file1="./helloworld$x.out" file2="./output/helloworld$x.out" if diff -q "$file1" "$file2"; then echo "Passed $x" else echo "Failed $x" fi

Если вы даже хотите скрыть это сообщение, вы должны добавить > /dev/null после команды diff, чтобы скрыть вывод diff:

if diff -q "$file1" "$file2" >/dev/null; then

/dev/null - это специальный файл, который действует как черная дыра, если вы пишете

Обратите внимание, что bash не нуждается в ; для завершения строк.

Что касается исходного вопроса, чтобы сохранить вывод программы в переменной:

file1="./helloworld$x.out" file2="./output/helloworld$x.out" output="$(diff -q "$file1" "$file2")" # the quotes are mandatory, this checks whether $output is empty or not if [ -n "$output" ]; then echo "Passed $x" else echo "Failed $x" fi

Альтернативные способы проверки, является ли переменная пустой:

[ "$output" = "" ] [ "$output" == "" ] [[ "$output" == "" ]] [[ $output == "" ]]

re, используя Bash, последние две команды рекомендуются для сравнения строк. В противном случае рекомендуется использовать первый и [ -n "$output" ].

17
ответ дан 9 August 2018 в 03:43

Другие вопросы по тегам:

Похожие вопросы: